﻿//  --------------------------------
//  Copyright (c) 2010 Michael Schuler, Sascha Burger. All rights reserved.
//  This source code is made available under the terms of the Microsoft Public License (Ms-PL)
//  http://p2pmessaging.codeplex.com/license
//  ---------------------------------
using System;
using System.Collections.Generic;

namespace p2pMessaging.Interfaces.Contact
{
	/// <summary>
	/// Contact represents the data of a person.
	/// </summary>
	public interface IContact : IPersistenceEntity, IEquatable<IContact>, IComparable<IContact>
	{
		/// <summary>
		/// Gets or sets the first name of the contact.
		/// </summary>
		string FirstName { get; set; }

		/// <summary>
		/// Gets or sets the last name of the contact.
		/// </summary>
		string LastName { get; set; }
		
		/// <summary>
		/// Gets the display name of the contact. The display
		/// name contains the first and the last name.
		/// </summary>
		string DisplayName { get; }

		/// <summary>
		/// Gets or sets the street of the contact.
		/// </summary>
		string Street { get; set; }

		/// <summary>
		/// Gets or sets the zip code of the contact.
		/// </summary>
		string ZipCode { get; set; }

		/// <summary>
		/// Gets or sets the city of the contact.
		/// </summary>
		string City { get; set; }

		/// <summary>
		/// Gets or sets the email address of the contact.
		/// </summary>
		string EmailAddress { get; set; }

		/// <summary>
		/// Gets or sets the IP address of the contact.
		/// </summary>
		string IpAddress { get; set; }
		
		/// <summary>
		/// Gets or sets the parent of the contact. Can be null.
		/// </summary>
		IContact Parent { get; set; }

		/// <summary>
		/// Gets the children of the contact. This list can be empty.
		/// </summary>
		IList<IContact> Children { get; }
	}
}
